home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / progs / sviluppo / pike-0.4.0 / src / amiga.c
C/C++ Source or Header  |  1997-01-10  |  1KB  |  94 lines

  1. /*
  2.    Amiga support module for Amiga Pike
  3.  
  4.    Copyright (c) 1997 by Bernhard Fastenrath
  5.    (fasten@cs.bonn.edu / fasten@shw.com)
  6.  
  7.    This file may be distributed under the terms
  8.    of the GNU General Public License.
  9. */
  10.  
  11. #include <exec/memory.h>
  12. #include <proto/exec.h>
  13.  
  14. #include "global.h"
  15. #include "memory.h"
  16. #include "error.h"
  17. #include "macros.h"
  18.  
  19. static void *pool = NULL;
  20.  
  21. void
  22. amiga_exit (void)
  23. {
  24.   if (pool)
  25.     DeletePool (pool);  
  26. }
  27.  
  28. int
  29. amiga_init (void)
  30. {
  31.   atexit (amiga_exit);
  32.  
  33.   if (!(pool = CreatePool (MEMF_PUBLIC, 4096, 4096)))
  34.     error ("Out of memory.\n");
  35. }
  36.  
  37. void *
  38. malloc (size_t size)
  39. {
  40.   char *mem;
  41.  
  42.   size += sizeof (size_t);
  43.   if (mem = AllocPooled (pool, size))
  44.   {
  45.     *(size_t *) mem = size;
  46.     mem += sizeof (size_t);
  47.   }
  48.   return mem;
  49. }
  50.  
  51. void *
  52. calloc (size_t n, size_t s)
  53. {
  54.   size_t size = n * s;
  55.   void *mem;
  56.  
  57.   if (mem = malloc (size))
  58.     bzero (mem, size);
  59.   return mem;
  60. }
  61.  
  62. void *
  63. realloc (void *b, size_t size)
  64. {
  65.   void *mem = NULL;
  66.   size_t b_size;
  67.  
  68.   if (size)
  69.   {
  70.     mem = malloc (size);
  71.   }
  72.   if (b)
  73.   {
  74.     if (mem)
  75.     {
  76.       b_size = *(size_t *) ((char *) b - sizeof (size_t));
  77.       bcopy (b, mem, size < b_size ? size : b_size);
  78.     }
  79.     if (mem || (!mem && size == 0))
  80.       free (b);
  81.   }
  82.   return mem;
  83. }
  84.  
  85. void
  86. free (void *ptr)
  87. {
  88.   size_t size;
  89.  
  90.   (char *) ptr -= sizeof (size_t);
  91.   size = *(size_t *) ptr;
  92.   FreePooled (pool, ptr, size);
  93. }
  94.